<!DOCTYPE html>
<html>

  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <title>
    2019-新年杂谈
    </title>
  <link type="application/atom+xml" rel="alternate" href="/feed.xml" title="虚实" />
  
  <style>
  table{
    border-left:1px solid #000000;border-top:1px solid #000000;
    width: 100%;
    word-wrap:break-word; word-break:break-all;
  }
  table th{
  text-align:center;
  }
  table th,td{
    border-right:1px solid #000000;border-bottom:1px solid #000000;
  }
  </style>

  <meta name="description" content="8102 年就这么过去了，比想象中的还要快，不知不觉在深圳就待了一年多了。 年初定的计划一个都没能完成，Wunderlist 里的 TODO 也不减反增。">
  <link rel="stylesheet" href="/css/main.css">
  <link rel="stylesheet" href="/css/toc.css">
  <link rel="canonical" href="/2019/01/03/2019-%E6%96%B0%E5%B9%B4%E6%9D%82%E8%B0%88/">
  <link rel="alternate" type="application/rss+xml" title="虚实" href="/feed.xml" />
  <link rel="stylesheet" href="/css/highlight.min.css">
  <link href="//cdn.staticfile.org/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet"media="all">
</head>


  <body>

    <header class="site-header">

  <div class="wrapper">
    <div>
      <a class="site-title" href="/">虚实</a>
      <div class="site-pages">
		<a class="site-page" href="/archive/">归档</a>
		<a class="site-page" href="/categories/">分类</a>
		<a class="site-page" href="/about/">关于</a>
		<a class="site-page" href="/friend-links/">友情链接</a>
        <a class="site-page" href="/recommends/">推荐</a>
      </div>
      <p class="site-sub-title">记录下折腾和学习的过程</p>
    </div>

  </div>

</header>


    <div class="page-content">
      <div class="wrapper">
        <div class="post">

  <header class="post-header">
    <h1 class="post-title">2019-新年杂谈</h1>
    <p class="post-meta">Jan 3, 2019 • admin</p>

	<p class="post-meta"> categories :   <a href="/categories/#默认"> 默认 </a>  </p>
    <div id="show_qrcode">
        <a>扫描二维码</a>
        <div id="qrcode" style="display:none;position:absolute;z-index:1"></div>
    </div>
  </header>
  <div class="nav">
      <div id="toc" class="toc"></div>
  </div>
  <article class="post-content">
    <p>8102 年就这么过去了，比想象中的还要快，不知不觉在深圳就待了一年多了。 年初定的计划一个都没能完成，Wunderlist 里的 TODO 也不减反增。</p>

<p>这一年大概是二十多年的人生中最忙碌和操心的一年了吧，没想到深圳的节奏比北京和上海比还要快上不少，到这边以后体验了一年真实的 996 的生活。发现原来工作投入了太多，是真的会容易让人对生活失去兴趣。</p>

<p>来TX之后最大的收获应该就是抗压能力直线上升吧，学会了如何在很多事情一起来的时候把事情按优先级安排好一件件做完，并且在压力很大的情况下保持较高工作效率。</p>

<p>还有就是随着年龄的增长，越发的领会到“身体是革命的本钱”这句话的含义。没有一个抗造的身体，根本扛不住加班的折磨。刚好深圳的气候还不错，一年四季都很暖和，也没有雾霾，挺适合锻炼。作为一个懒人，运动也就跑跑步。现在没事也能跑个5公里了，虽然算不上厉害，但是和以前还是一个爱玩游戏的肥宅的时候比起来也算有不少进步了。和17年离开北京的时候比，陆陆续续的减了10几斤。和以前的朋友见面，第一句总是“你怎么瘦了这么多”，我总结了一下，秘诀大概就是”努力工作”吧，毕竟开始想锻炼身体也是工作的副产物。</p>

<p>同时，心态上也改变了不少，得失心没以前那么重了。不再那么在意别人的评价之类的事情，一心只想把手里的事情做好，可以说是变得更职业化了吧。算一算，加上实习也工作了3年多快4年了，对职业的认知也越来越深了。在领导的安排下也开始带一带实习生了，看着新来的97、98年的实习生，突然发现我已经不再是公司里最年轻的那一批人了。看着他们总会想起几年前自己实习时候的样子，很想谢一下以前领导的包容和指点，在自己那么忙的情况下还能抽出时间耐心的指导我。</p>

<p>想起以前实习的日子，在阿里的时候，啸哥和凯哥教我分布式和 DevOps 的各种东西，尝试各种新工具。在 keenteam 的时候同事们不嫌弃我不懂安全，带我见识了很多安全研究领域以前没接触过的东西。</p>

<p>17年国庆换到深圳，本想换个方向，做一些更贴近时代的活。没想到互联网进入下半场，日子不太好过，业务也从 toc 转做 tob 安全，又变回做和数字公司类似的业务。不过从方法上稍微有一些不同。</p>

<p>比如在数字的时候做的都是盒子型产品，很多功能都需要追求单机高性能，都是手动造轮子。到了鹅厂再做类似的产品的时候，还是会尝试用一些大数据的组件的，例如使用 flink 做流式处理，hdfs 做存储，以及在设备中集成一些机器学习的模块来做 DGA 识别和 UEBA 之类的事。</p>

<p>18年中旬开始转做威胁情报，负责这边威胁情报的生产和运营工作。主要是在做数据处理和运营流程的搭建。其中数据处理部分涉及到在不同的数据量级和不同的使用场景下如何选择合适的平台和框架，如何搭建数据收集、清洗、加工的 pipeline。这一块的总结可以看一下我的另外一个系列的文章–<a href="2018/09/08/seven-weapons-of-data-analysis/">数据分析的七种武器</a>。威胁情报业务用到了比较多的组件，其中用的最重要的是 s2graph 图数据库。我们使用 s2graph 来做知识图谱上的推理，用于发现新的 IOC，这个流程在国内的业界还算比较领先的。其次就是 HIVE 和 MySQL 了，大量的数据都是通过 Python 脚本加上 SQL 语句来处理的。全量的数据存储在 HIVE 中，经过tx内部的类似阿里 ODPS 平台这样的大数据平台对数据进行初步处理，将中间结果导入到 MySql 集群，再用 Python 脚本读到内存中进行多维度的判断，包括调用公司内部的各种接口和通过封装好的 api 查图数据库，最后得到结果。</p>

<p>然后也简单的尝试过写一些 pyspark 脚本处理一些大批量的数据，以及使用 xgboost 和基于图的简单机器学习算法对数据做一些处理。发现只要对业务理解够深入，有足够的训练样本，很多简单的机器学习方法也可以产生不错的效果。</p>

<p>回过头来看，今年写的代码行数最多的语言竟然是 PHP，这也是一个很荒诞的事情。因为有大量的内部系统，包括数据加工以及线上运营等等都需要内部的运营系统，然后因为人力紧张没有专门的 web 开发支持，所以大部分的运营页面都只能自己写，然后运营的工作除了有几个外包同学帮忙也基本都是自己做。其实数据类产品除了的技术问题外，最重要的还是运营了，毕竟数据的质量最后还是得由人来保证得，用同事得话来说就是“人工智能就是有多少人工才能有多少智能”。很荣幸扮演了一回人工智能背后的“人工”，为祖国的信息安全事业添砖加瓦。</p>

<p>除了主要的业务，18年还做了杂七杂八的很多事情。比如尝试了一下公司的 rpc 框架 taf，临时边学边写，用 c++ 做了一个 cgi 的 http 数据查询接口。</p>

<p>还有就是花了一个星期左右，一个人从前端到后端写了一个小程序–“安查查”，前端最后完成了功能才等到专业的设计和前端同学帮忙优化样式。最后还被同组的高工吐槽前端水平不够，不会设计界面，写出来的界面不好看。换作以前我可能还会争论一番，真正到了事情都不完的情况反而不想争论了。工作已经够累了，不如佛系一点。</p>

<p>除了工作内容， Side project 就是重启了 <a href="https://github.com/Mithrilwoodrat/naivecompiler">naivecompiler</a> 编译器项目，重读了一遍 clang的代码，升级了使用的 llvm 版本到 6.0，加上了 Dokcerfile， 重构了代码生成的逻辑以及 cfg 生成的逻辑，支持了更多的特性。还有就是陆陆续续写了一点 <a href="https://github.com/Mithrilwoodrat/jpyrunner">jpyrunner</a> 的代码，边看 CPython 源码边学习一下 Java，试着用 Java 解析 pyc 文件然后解释执行，目前只做到解析 opcode 就暂停了。
还有就是系统的学了下 snort 规则和配置，写了一些用 flowsynth 自动生成 pcap 的工具，以及基于 idstools 可视化编辑 snort 规则， 基于 barnyard2 解析 snort 告警并可视化。感觉和工作里接触比较多的 suricata 比起来，snort 还是要难用很多的。而且 suricata 稍微配置一下就能从 log 里读到解析后的流量日志了，很多开源的 SOC 都是基于 suricata 做流量采集的。</p>

<p>说了这么多工作上的事，其实都不怎么重要。2018 最重要也是最开心的一件事是遇到了喜欢的人。她的出现改变了我好多，让我不再那么急躁，也不再整天只关心代码和游戏。每天我都期待着下班回家，能和她聊聊天，那是一天中最快乐的时光。她从不嫌弃我一无所有又整天瞎忙，多希望能有更多的时间可以多陪陪她。有时候我也会傻傻的惹她不开心，但是她总会很快原谅我怕我自责。想好好珍惜这么好的姑娘，天天都想逗她开心。想永远都和她在一起。</p>

<p>杂七杂八的说了这么多，最后提前祝大家新年快乐，新的一年都能和心爱的人一起度过，祝天下有情人终成眷属。</p>

  </article>

</div>
<div id="disqus_thread"></div>
<script type="text/javascript">
    /* * * CONFIGURATION VARIABLES * * */
    var disqus_shortname = 'yoursoulismine';
    
    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
<script type="text/javascript">
    /* * * CONFIGURATION VARIABLES * * */
    var disqus_shortname = 'yoursoulismine';
    
    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function () {
        var s = document.createElement('script'); s.async = true;
        s.type = 'text/javascript';
        s.src = '//' + disqus_shortname + '.disqus.com/count.js';
        (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
    }());
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://flowchart.js.org/flowchart-latest.js"></script>
<script src="/js/highlight.min.js"></script>
<script src="/js/toc.js"></script>
<script src="/js/qrcode.min.js"></script>
<script>
if (!String.prototype.format) {
    String.prototype.format = function() {
        var args = arguments;
        return this.replace(/{(\d+)}/g, function(match, number) { 
            return typeof args[number] != 'undefined'
                ? args[number]
                : match
            ;
        });
    };
}

$('pre code').each(function(i, block) {
    hljs.highlightBlock(block);
});

$('.language-flow').each(function(i, block) {
    console.log(block);
    code = $(this).text();
    diagram = flowchart.parse(code);
    canvas_id = 'flow'+ i;
    console.log(canvas_id);
    temp = "<div id='{0}'> </div>".format(canvas_id);
    console.log(temp);
    $(this).html(temp);
    diagram.drawSVG(canvas_id, {
        'x': 0,
        'y': 0,
        'line-width': 3,
        'line-length': 50,
        'text-margin': 10,
        'font-size': 14,
    });	
});

$('#toc').toc({
    noBackToTopLinks: true,
    listType: 'ul',
    title: 'TOC',
});

var url = location.href;
console.log(url);
var qrcode = new QRCode("qrcode", {
    text: url,
    width: 128,
    height: 128,
    colorDark : "#000000",
    colorLight : "#ffffff",
    correctLevel : QRCode.CorrectLevel.H
});

$(document).ready(function () {
    $('#show_qrcode').on('mouseenter', function () {
        $('#qrcode').show();
        $(this).css({
            "text-decoration": "underline"
        });
    }).on('mouseleave', function () {
        $('#qrcode').hide();
        $(this).css({
            "text-decoration": ''
        });
    });;
});
</script>

      </div>
    </div>

    <footer class="site-footer">

  <div class="wrapper">


    <div class="footer-col-wrapper">
      <div class="footer-col  footer-col-1">
        <ul class="contact-list">
	  <li>
          <li><a href="mailto:mithrilwoodrat@gmail.com">mithrilwoodrat@gmail.com</a></li>
        </ul>
      </div>

      <div class="footer-col  footer-col-2">
        <ul class="social-media-list">
          
          <li>
            <a href="https://github.com/Mithrilwoodrat">
              <span class="icon  icon--github">
                <svg viewBox="0 0 16 16">
                  <path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
                </svg>
              </span>
              <span class="username">Mithrilwoodrat</span> 
            </a>
          </li>
          
        </ul>
      </div>
  </div>
</footer>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-66599686-1', 'auto');
  ga('send', 'pageview');

</script>
</body>
</html>
